


local Lang = require("common.Lang")
local Msg = require("core.Msg")
local ObjHuman = require("core.ObjHuman")
local Util = require("common.Util")
local Grid = require("bag.Grid")
local Timer = require("core.Timer")
local BagLogic = require("bag.BagLogic")
local Broadcast = require("broadcast.Broadcast")
local BRoleLogic = require("billboard.BRoleLogic")
local BillboardDB = require("billboard.BillboardDB")
local BillboardDefine = require("billboard.BillboardDefine")
local RoleLogic = require("role.RoleLogic")
local CommonDB = require("common.CommonDB")
local YunYingLogic = require("yunying.YunYingLogic")
local AbsActExcel = require("excel.absAct")
local MailExcel = require("excel.mail")
local MailManager = require("mail.MailManager")
local MailDefine = require("mail.MailIdDefine")
local RoleDBLogic = require("role.RoleDBLogic")
local AbsActLogic = require("absAct.AbsActLogic")

function getEndTime()
    local now = os.time()
    local endTime = Util.getDayStartTime(now + 24 * 60 * 60)
    return endTime - now
end

function query(human)
    local msgRet = Msg.gc.GC_ABS_ICE_DRAGON_RANK_QUERY
    local board = BillboardDB.getBoard(BillboardDefine.TYPE_DRAGON)
    msgRet.list[0] = 1
    local msgNet =  msgRet.list[1]
    msgNet.funcRankType = 3
    msgNet.leftTime = getEndTime()
    msgNet.list[0] = 10
    
    for i = 1, 10 do            
        local net = msgNet.list[i]
        net.rank = i
        net.rankNeedValue= 0
        if board and board.rank2data[i]  then         
            local rankData = board.rank2data[i]      
           
            net.uid = rankData.roleBase and rankData.roleBase.uuid or rankData.uuid 
            net.rankValue = rankData and rankData.value1 or 0
            
            if rankData and rankData.roleBase then
                net.uid = net.uid or ""
                net.name = rankData.roleBase.name
                net.head =  rankData.roleBase.head
                net.headFrame =  rankData.roleBase.headFrame
                net.lv = rankData.roleBase.lv
            else
                local userDB = RoleDBLogic.getDb(rankData.uuid)
                net.uid = rankData.uuid
                net.name = userDB.name
                net.head = userDB.head
                net.rankValue = rankData.value1
                net.headFrame = userDB.headFrame
                net.lv = userDB.lv
            end
        else
            net.uid = "-1"
            net.name = ""
            net.head = -1
            net.rankValue = 0
            net.headFrame = -1
            net.lv = -1
        end           

        local id = getRewardByRank(i)
        local conf = AbsActExcel.IceRank[id]
        for j, h in ipairs(conf.totalRewards) do
            Grid.makeItem(net.items[j], h[1], h[2])
        end
        net.items[0] = #conf.totalRewards
    end       
       

    -- 获取排行区间 奖励  给予前端处理 放到各个名词后面  显示排名奖励
 --[[
for k, v in ipairs(AbsActExcel.IceRank) do
        local net = msgRet.rankItem[k]
        net.minRank = v.minRank
        net.maxRank = v.maxRank
        net.rankNeedValue = 0
        for j, h in ipairs(v.reward) do
            Grid.makeItem(net.items[j], h[1], h[2])
        end
        net.items[0] = #v.reward
    end
    msgRet.rankItem[0] = #AbsActExcel.IceRank
 ]]   

    local myRank = BillboardDB.getRank(BillboardDefine.TYPE_DRAGON, human.db._id)
    if myRank then
        local rankData = BillboardDB.getRankData(BillboardDefine.TYPE_DRAGON, myRank)
        if rankData then           
            local net =   msgNet.onwerData
            net.rank = myRank 
	        net.rankValue = rankData and rankData.value1 or 0
            net.items[0] = 0
        end 
    else
        local net =   msgNet.onwerData
        net.rank = -1 
        net.rankValue = rankData and rankData.value1 or 0
        net.items[0] = 0
    end
   -- Msg.trace(msgRet)
    Msg.send(msgRet, human.fd)
end

function queryReward(human)
    local msgRet = Msg.gc.GC_ABS_REACH_RANK_REWARD_QUERY
    msgRet.actId = 0
    msgRet.funcRankType = 3
    for k , conf in ipairs(AbsActExcel.IceRank) do
        local net = msgRet.list[k]
        net.minRank  =  conf.roleMin
        net.maxRank = conf.roleMax
        net.rankNeedValue = 0
        
        for j, h in ipairs(conf.totalRewards) do
            Grid.makeItem(net.items[j], h[1], h[2])
        end
        net.items[0] = #conf.totalRewards
    end
    msgRet.list[0] = #AbsActExcel.IceRank
    Msg.send(msgRet, human.fd)
end

function getRewardByRank(rank)
    for k , conf in ipairs(AbsActExcel.IceRank) do
        if conf.roleMin <= rank and  conf.roleMax >= rank then
            return k  
        end
    end
end

function onZero(funcID)
    local absConfig = AbsActExcel.absActivity[funcID]
    if not absConfig then return end
    local funcConfig = YunYingLogic.getFuncConfig(funcID)
	if not funcConfig then return end

    if not AbsActLogic.isStarted(human, funcID) then
        local diffDay = Util.diffDay(absConfig.realEndTime)
        if diffDay ~= 1 then     
            return
        end        
    end
    local board = BillboardDB.getBoard(BillboardDefine.TYPE_DRAGON)
	if board then 
        local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_HEFU_ICE_RANK]
        local title = mailConfig.title
        local senderName = mailConfig.senderName	

        local sendList = {}
        local len = 0
        for rank = 1, #board.rank2data do
            local rankData = board.rank2data[rank]
            if rankData then
                local uuid
                if rankData and rankData.roleBase then
                    uuid = rankData.roleBase.uuid
                end 

                if not uuid  then
                    uuid = rankData and rankData.uuid or ""
                end
                if uuid then
                    len = len + 1
                    sendList[len] = {}
                    sendList[len].uuid = uuid
                    sendList[len].rank = rank
                end
            end
        end

        if len > 0 then
            Timer.addLater(25, iceDragonRankSend, sendList, 0 )
        end
    end
end



function iceDragonRankSend(sendList, len)
    if len >= #sendList then return end
    local mailConfig = MailExcel.mail[MailDefine.MAIL_ID_HEFU_ICE_RANK]
    local title = mailConfig.title
    local senderName = mailConfig.senderName	
    
    local thisLen = 0 
    for i = len + 1 , #sendList do
        
        local uuid = sendList[i].uuid
        local rank = sendList[i].rank
    
        local id = getRewardByRank(rank)
        local conf = AbsActExcel.IceRank[id]
        local content = Util.format(mailConfig.content, rank)
        MailManager.add(MailManager.SYSTEM, uuid, title, content, conf.totalRewards, senderName)
        thisLen = thisLen + 1
        if thisLen >= 10 then
            break
        end
    end
  

    local nextLen = len + thisLen
    if nextLen < #sendList and #sendList > 0 then
        Timer.addLater(2, iceDragonRankSend, sendList, nextLen)      
    end  
        
end









